﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using MobMentality.GraphUtil;

namespace MobMentality.Map
{
	public interface IMapNavigate
	{
		/*Num of rows and columns*/
		int NumRows { get; }
		int NumColumns { get; }
		int TileWidth { get; }
		int TileHeight { get; }

		/*
		 * row - tile row
		 * column - tile column
		 */
		string NavigationType(int row, int column);

		/*
		 * Camera - current location of the camera
		 * screenX - the x-coord of the location on-screen that you want nav info for
		 * screenY - the y-coord of the location on-screen that you want nav info for
		 */
		string NavigationType(Vector2 Camera, int screenX, int screenY);

		/*
		 * mapPosition - x/y coord in the map (not the screen)
		 * REMEMBER: Y is ROWS, X is COLUMNS
		 */
		Point GetTile(Vector2 mapPosition);

		/*
		 * tile - tile coordinates
		 * offset - offset within the tile
		 * REMEMBER: Y is ROWS, X is COLUMNS
		 */
		Vector2 GetMapPosition(Point tile, Vector2 offest);

		/*
		 * tile - tile coordinates
		 * REMEMBER: Y is ROWS, X is COLUMNS
		 */
		Vector2 GetMapPosition(Point tile);

		/*
		 * tile - the column/row of the tile we want to evaluate
		 */
		bool isNavigable(Point tile);
	
		/*
		 * run AStarNext in the navmesh graph and return the next tile in the path
		 */
		Point nextAStarTile(Point start, Point end, Graph<Point>.distanceHeuristic distHeuristic);

		/*
		 * run AStarNext in the navmesh graph and return distance
		 */
		int AStarDistance(Point start, Point end, Graph<Point>.distanceHeuristic distHeuristic);

		/*
		 * get the coordinates for the nearest distraction tile
		 */
		Point NearestDistraction(Point tileLocation);

		/*
		 * Work on capturing a location
		 */
		void Capture(Point tile);

		/*
		 * Check to see if all control points have been captured
		 */
		bool CheckRiotControlpointEndgame();

		/*
		 * List of tiles that have been captured
		 */
		List<Point> GetCapturedTiles();
	}
}
